<?php
/**
 * 当有了IoC/DI的容器后,a类依赖c实例注入的示例
 */

/**
 * Class c
 */
class c
{
    public function say()
    {
        echo 'hello';
    }
}

/**
 * Class a
 */
class a
{
    private $c;

    public function setC(C $c) //参数要求对象必须为C类的实例，这里的C是php的类型约束
    {
        $this->c = $c; // 实例化创建C类
    }

    public function sayC()
    {
        echo $this->c->say(); // 调用C类中的方法
    }
}

$c = new C();
$a = new a();
$a->setC($c);
$a->sayC();

/* 总结
 其实IoC/DI对编程带来的最大改变不是从代码上，而是从思想上，发生了“主从换位”的变化。应用程序原本是老大，要获取什么资源都是主动出击，但是在IoC/DI思想中，应用程序就变成被动的了，被动的等待IoC/DI容器来创建并注入它所需要的资源了。

 注意
 我们上面说了，这是一种“设计模式”，就像“工厂模式”和“单例模式”等是一样的，它是一种面向对象中的编程“思想”，自然它也不仅限于PHP，而是所有面向对象的语言基本都是可以适用的。 */